package com.baima46;

import cn.hutool.core.lang.Assert;
import com.baima46.builder.SheetBuilder;
import com.baima46.core.ExportHandle;
import com.baima46.core.InfoHandle;
import com.baima46.model.ExcelInfo;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * excel生成工具类
 * @author yuancong
 * @version 4.0
 */
public class ExcelPlus {
    private static void check(Object excel, List<?> dataList, Class<?> dataClass,String... group){
        Assert.notNull(excel, "导出的文件或文件名 不能为空！");
        Assert.notNull(dataClass, "导出的java类 不能为空！");
    }


    /**
     * SheetBuilder，开始构建多sheet导出
     * @param excelName Excel表名
     * @return {@link SheetBuilder}
     */
    public static SheetBuilder builder(String excelName) {
        return new SheetBuilder(excelName);
    }

    /**
     * 生成excel并通过http response下载
     * @param excelName Excel表名
     * @param dataList 数据bean集合,支持bean使用注解设置表头
     * @param dataClass 数据bean的类对象
     * @param group 分组
     */
    public static void downloadExcel(String excelName, List<?> dataList, Class<?> dataClass,String... group) {
        check(excelName,dataList,dataClass,group);
        try {
            ExcelInfo excelInfo = InfoHandle.getInfo(excelName, dataList, dataClass, group);
            //下载
            ExportHandle.exportResponse(excelInfo);
        }catch (Exception e){
            e.printStackTrace();
            throw new RuntimeException("表格导出异常！");
        }
    }

    /**
     * 导出excel到文件
     * @param filePath 导出的文件路径
     * @param dataList 数据bean集合,支持bean使用注解设置表头
     * @param dataClass 数据bean的类对象
     * @param group 分组
     */
    public static void exportExcel(String filePath, List<?> dataList, Class<?> dataClass, String... group) {
        Assert.notNull(filePath, "导出的文件路径 不能为空！");
        exportExcel(new File("filePath"),dataList, dataClass,group);
    }

    /**
     * 导出excel到文件
     * @param file 导出的文件
     * @param dataList 数据bean集合,支持bean使用注解设置表头
     * @param dataClass 数据bean的类对象
     * @param group 分组
     */
    public static void exportExcel(File file, List<?> dataList, Class<?> dataClass, String... group) {
        check(file,dataList,dataClass,group);
        try {
            ExcelInfo excelInfo = InfoHandle.getInfo(file.getName(), dataList, dataClass, group);
            //下载
            ExportHandle.exportFile(excelInfo, file);
        }catch (Exception e){
            e.printStackTrace();
            throw new RuntimeException("表格导出异常！");
        }
    }

}
